﻿/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#ifndef __37F9D32B_31F4_455b_BEDD_5E9BE1EF8F71__
#define __37F9D32B_31F4_455b_BEDD_5E9BE1EF8F71__

#include "../msg/head.h"

namespace xos_log
{

    class log_impl : public i_log
    {
    public:
        typedef xos::release_impl< log_impl > T;

    public:
        log_impl();
        ~log_impl();

    public:
        // 
        // 使用日志功能
        // 
        int log_info( const char * lpszName, int ulLevel, const char * lpszCodeFile, int ulCodeLine, const char * lpszFmt, ... );
        int flush();

        // 
        // 设置公共线程，所有日志消息都扔到这个线程中处理。公用线程能节省，少用一些线程，代码也清楚一些
        // 
        int set_work_thread( xos_box::i_callback * pWorkThread );

        // 
        // 通过xml配置文件设置参数.和通过读取XML内容设置
        // 
        int set_config_string( const char * lpszConfigString );
        int set_config_file( const char * lpszConfigFile );

        // 
        // 手动设置参数
        // 
        int add_log_module( const char * lpszModuleName, int ulLevel );

        // 
        // 添加日志输出方式
        // 
        int create_logger( enumLogObject enumType, void ** ppv );
        int add_logger( i_logger * pLogger );

        // 
        // 日志开关
        // 
        int enable( bool bEnable );

    public:
        static int run_task( xos_box::i_msg *& pMsg );
        static int proc_log( xos_box::i_msg * pMsg );
        static int flush_log();


    public:
        int put_back_to_pool( T * pT, bool bLock );
        int init();
        int term();

    protected:
        int notify( enumMsg eMsg, void * lpData );
        int init_data();

    protected:
        bool m_bEnableLog;

    };

} // xos_log

#endif // __37F9D32B_31F4_455b_BEDD_5E9BE1EF8F71__
